#include <stdio.h>

int s[43] = {0};

int count = 0;

// 功能：计算跳上n阶台阶的跳发之和 返回计算的结果
int func(int n){
    count++;
    if(s[n] != 0){ // 如果前面计算过了 就直接使用值 避免重复运算
        return s[n];
    }
    if(2 == n){
        return 2;
    }else if(1 == n){
        return 1;
    }
    int num = func(n-1) + func(n-2);
    s[n] = num;
    return num;
}

int main(int argc, const char *argv[]){
    int ret = func(42);
    printf("跳法共有 %d 种\n", ret);
    printf("函数被执行了 %d 次\n", count);
    return 0;
}